"""
此脚本用于计算要素之间的平均最小相邻距离，即依次查找各要素到距它最近
的要素的距离，然后计算平均值。适用于在进行某些地理分析之前，厘清每个
要素距其最近的要素平均距离的情况。
输入：一个csv文件，其中包含要素的X坐标和Y坐标字段。
输出：欧式距离
"""

import pandas as pd
import numpy as np

# 配置参数
csv_file = "D:\Lenovo\Desktop\云南大学\毕业设计\毕设数据\输出数据\csv\countyzhujiang_Factors_2010_空间连接_TableToExcel2.csv"  # 替换为你的CSV文件路径
x_column = 'X_position'          # X坐标的列名
y_column = 'Y_position'          # Y坐标的列名

# 读取数据
try:
    df = pd.read_csv(csv_file)
    points = df[[x_column, y_column]].values
except KeyError:
    raise ValueError(f"CSV文件中需要包含'{x_column}'和'{y_column}'列")
except Exception as e:
    raise RuntimeError(f"读取文件失败: {str(e)}")

# 检查数据有效性
if len(points) < 2:
    raise ValueError("至少需要两个地理要素进行计算")

# 计算距离矩阵
diff = points[:, np.newaxis] - points
distances = np.sqrt(np.sum(np.square(diff), axis=2))

# 排除自身距离并找最小距离
np.fill_diagonal(distances, np.inf)
min_distances = np.min(distances, axis=1)

# 计算并输出结果
average_distance = np.mean(min_distances)
print(f"平均最小相邻距离为：{average_distance:.4f} 单位")